Functies zijn 'eersteklas burgers'
Home

Functies zijn 'eersteklas burgers'

Functies zijn 'eersteklas burgers'

Van een programmeertaal wordt gezegd dat ze eersteklas functies (first-class functions of literal functions) ondersteunt als het functies behandelt als eersteklas objecten. Concreet betekent dit dat de taal:
  1. het aanmaken van nieuwe functies tijdens de uitvoering van een programma ondersteunt;
  2. toelaat dat functies toegekend kunnen worden aan:
    1. gegevensstructuren,
    2. als argumenten voor andere functies kunnen meegegeven worden,
    3. en als waarde van andere functies geretourneerd kunnen worden.

Inleiding

Het begrip "eersteklas functies" werd geïntroduceerd door de Britse computerwetenschapper Christopher Strachey in de jaren 1960.

Filmpje: Functies zijn 'eersteklas burgers' in JavaScript

Dit is een belangrijk begrip van functioneel programmeren namelijk functies als eersterangs burgers. Michael Fogus definiëert eersterangs functies in zijn boek, Functional JavaScript, 2013, als volgt:

The term “first-class” means that something is just a value. A first-class function is one that can go anywhere that any other value can go—there are few to no restrictions. A number in JavaScript is surely a first-class thing, and therefore a first-class function has a similar nature:
  1. als een getal in een variabele kan worden opgeslagen moet dat met een functie ook kunnen:
    var fortytwo = function() { return 42 };
  2. een getal kan in een element van een array gestopt worden, een functie dus ook:
    var fortytwos = [42, function() { return 42 }];
  3. een getal kan in een objectveld opgeslagen worden, een functie dus ook:
    var fortytwos = {number: 42, fun: function() { return 42 }};
  4. een getal kan on the fly gecreëerd worden en een functie dus ook:
    42 + (function() { return 42 })(); // => 84
    of
    10 + function() {return parseInt(prompt('Voer een getal in', 10))}();
  5. een getal kan als argument met een functie meegegeven worden, een functie dus ook:
    function weirdAdd(n, f) { return n + f() }
    weirdAdd(42, function() { return 42 }); // => 84
    
  6. een getal kan als retourwaarde van een functie meegegeven worden, een functie dus ook:
    return 42;
    return function() { return 42 };
    

Javascript functies zijn 'First-Class omdat':

  1. een functie is een object;
  2. ze aan eenn variabelen toegekend kunnenworden;
  3. ze eigenschappen zijn van een ander object
  4. ze doorgegeven kunnen worden als argument aan een andere functie
  5. ze door een functie geretourneerd kunnen worden

Top-level functies zijn eigenschappen van het window object, net als alle andere globale variabelen. De volgende statements hebben allemaal de zelfde uitwerking:


function hallo() { alert('hallo') }
var hallo = function() { alert('hallo') }
window.hallo = function() { alert('hallo') }

Het feit dat functies eersteklas burgers zijn in JavaScript zorgt ervoor dat je 'rare' dingen kan doen in JavaScript.

JI
2020-02-17 09:44:54